package com.wlz.basic.javaEquals;
import	java.util.HashMap;

import java.util.Map;

/**
 * Java中equals和==的区别
 *
 *  ==
 *      1.基本数据类型，也称原始数据类型。byte,short,char,int,long,float,double,boolean
 *          他们之间的比较，应用双等号（==）,比较的是他们的值。
 *
 *          基本数据类型比较， == 和 Equals 两者都是比较值；
 *      2.复合数据类型(类)
 *          当他们用（==）进行比较的时候，比较的是他们在内存中的存放地址，所以，除非是同一个new出来的对象，他们的比较后的结果为true，
 *          否则比较后结果为false。
 *
 *      JAVA当中所有的类都是继承于Object这个基类的，在Object中的基类中定义了一个equals的方法，这个方法的初始行为是比较对象的内存地址，
 *      对于复合数据类型之间进行equals比较，在没有覆写equals方法的情况下，他们之间的比较还是基于他们在内存中的存放位置的地址值的
 *
 *      但在一些类库当中这个方法被覆盖掉了，如String,Integer,Date，在这些类当中equals有其自身的实现，而不再是比较类在堆内存中的存放地址了。
 *
 *      因为Object的equals方法也是用双等号（==）进行比较的，所以比较后的结果跟双等号（==）的结果相同。
 *  equals
 *      equals方法，首先是在Object中被定义的，它的定义中就是使用==方式来匹配的，也就是说，如果不去重写equals方法，
 *      并且对应的类其父类列表中都没有重写过equals方法，那么默认的equals操作就是对比对象的地址。
 *
 *       equals方法之所以存在，是希望子类去重写这个方法，实现对比值的功能，类似的，String就自己实现了该方法。
 *
 */
public class JavaEquals {

    public static void main(String[] args) {
//        testString();
//        testNewString();
        testHashMap();
    }

    public static void testHashMap() {
        Map<String, String> map = new HashMap<String, String> (32);
        map.put("aa","aaaa");
        map.put("bb","bbb");

        map.get("aa");

    }


    public static void testString() {
        String s1 = "Monday";
        String s2 = "Monday";
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
    }

    public static void testNewString() {
        String s1 = "Monday";
        String s2 = new String("Monday");
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
        if (s1.equals(s2)) {
            System.out.println("s1 equals s2");
        } else {
            System.out.println("s1 not equals s2");
        }
    }


}
